home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Personal Computer World 2009 February
/
PCWFEB09.iso
/
Software
/
Linux
/
Kubuntu 8.10
/
kubuntu-8.10-desktop-i386.iso
/
casper
/
filesystem.squashfs
/
etc
/
init.d
/
umountfs
< prev
next >
Wrap
Text File
|
2008-10-14
|
4KB
|
185 lines
#! /bin/sh
### BEGIN INIT INFO
# Provides: umountfs
# Required-Start:
# Required-Stop: umountroot
# Default-Start:
# Default-Stop: 0 6
# Short-Description: Turn off swap and unmount all local file systems.
# Description:
### END INIT INFO
PATH=/sbin:/usr/sbin:/bin:/usr/bin
. /lib/init/vars.sh
. /lib/lsb/init-functions
umask 022
# Print in order of decreasing length
#
# Algorithm: Find and print longest argument, then call self
# to print remaining arguments in order of decreasing length
#
# This function runs at one tenth the speed of the sort program
# but we use the function because we don't want to rely on any
# programs in /usr/.
#
# N.B.: Arguments must not be null and must not contain whitespace
#
pioodl() {
[ "$1" ] || return 0
ARGNUM=1
ARGNUM_LONGEST=0
ARGLENGTH_LONGEST=0
for ARG in "$@"
do
ARGLENGTH="${#ARG}"
if [ "$ARGLENGTH" -gt "$ARGLENGTH_LONGEST" ]
then
ARGLENGTH_LONGEST="$ARGLENGTH"
ARGNUM_LONGEST="$ARGNUM"
fi
ARGNUM=$(($ARGNUM + 1))
done
# The method of passing prevargs assumes that args can be
# delimited with spaces
ARGNUM=1
PREVARGS=""
while [ "$ARGNUM" -lt "$ARGNUM_LONGEST" ]
do
PREVARGS="$PREVARGS $1"
shift
ARGNUM=$(($ARGNUM + 1))
done
echo "$1"
shift
pioodl $PREVARGS "$@"
}
do_stop () {
exec 9<&0 </proc/mounts
PROTECTED_MOUNTS="$(sed -n '0,/^\/[^ ]* \/ /p' /proc/mounts)"
WEAK_MTPTS="" # be gentle, don't use force
REG_MTPTS=""
TMPFS_MTPTS=""
while read DEV MTPT FSTYPE REST
do
echo "$PROTECTED_MOUNTS" | grep -qs "^$DEV $MTPT " && continue
case "$MTPT" in
/|/proc|/dev|/.dev|/dev/pts|/dev/shm|/dev/.static/dev|/proc/*|/sys|/lib/init/rw)
continue
;;
/var/run)
if [ yes = "$RAMRUN" ] ; then
continue
fi
;;
/var/lock)
if [ yes = "$RAMLOCK" ] ; then
continue
fi
;;
esac
case "$FSTYPE" in
proc|procfs|linprocfs|devfs|sysfs|usbfs|usbdevfs|devpts)
continue
;;
tmpfs)
TMPFS_MTPTS="$TMPFS_MTPTS $MTPT"
;;
*)
if echo "$PROTECTED_MOUNTS" | grep -qs "^$DEV "; then
WEAK_MTPTS="$WEAK_MTPTS $MTPT "
else
REG_MTPTS="$REG_MTPTS $MTPT"
fi
;;
esac
done
exec 0<&9 9<&-
#
# Make sure tmpfs file systems are umounted before turning off
# swap, to avoid running out of memory if the tmpfs filesystems
# use a lot of space.
#
if [ "$TMPFS_MTPTS" ]
then
TMPFS_MTPTS="$(pioodl $TMPFS_MTPTS)"
if [ "$VERBOSE" = no ]
then
log_action_begin_msg "Unmounting temporary filesystems"
umount $TMPFS_MTPTS
log_action_end_msg $?
else
log_daemon_msg "Will now unmount temporary filesystems"
umount -v $TMPFS_MTPTS
log_end_msg $?
fi
fi
#
# Deactivate swap
#
if [ "$VERBOSE" = no ]
then
log_action_begin_msg "Deactivating swap"
swapoff -a >/dev/null
log_action_end_msg $?
else
log_daemon_msg "Will now deactivate swap"
swapoff -a -v
log_end_msg $?
fi
#
# Unmount local filesystems
#
if [ "$WEAK_MTPTS" ]; then
WEAK_MTPTS="$(pioodl $WEAK_MTPTS)"
if [ "$VERBOSE" = no ]
then
umount -r -d $WEAK_MTPTS
else
umount -v -r -d $WEAK_MTPTS
fi
fi
if [ "$REG_MTPTS" ]
then
REG_MTPTS="$(pioodl $REG_MTPTS)"
if [ "$VERBOSE" = no ]
then
log_action_begin_msg "Unmounting local filesystems"
umount -f -r -d $REG_MTPTS
log_action_end_msg $?
else
log_daemon_msg "Will now unmount local filesystems"
umount -f -v -r -d $REG_MTPTS
log_end_msg $?
fi
fi
}
case "$1" in
start)
# No-op
;;
restart|reload|force-reload)
echo "Error: argument '$1' not supported" >&2
exit 3
;;
stop)
do_stop
;;
*)
echo "Usage: $0 start|stop" >&2
exit 3
;;
esac
: